上回我們在Viusal Studio建立了測試專案,並且也嘗試執行了測試Case,今天我們就實際來做一次單元測試。
首先我們先建立一個方法,先以最簡易的加法做測試,我們需要參數a和參數b,並且回傳a+b,語法如下:
public int Add(int a, int b)
{
int result = a + b;
return result;
}
接著我們要測試這支方法,雖然答案顯而易見看起來不需要測試,但是我們還是先依照流程進行測試,我們在測試Case中使用方法,語法如下:
[Fact]
public void Test1()
{
int actual_1 = Add(1, 2);
int actual_2 = Add(2, 4);
int expected_1 = 3;
int expected_2 = 6;
}
public int Add(int a, int b)
{
int result = a + b;
return result;
}
actual是我們實際使用要測試的方法得到的結果,而expeted則是我們原本預期得到的結果,接下來我們可以用各式的Assert來當作判斷,語法如下:
[Fact]
public void Test1()
{
int actual_1 = Add(1, 2);
int actual_2 = Add(2, 4);
int expected_1 = 3;
int expected_2 = 6;
Assert.Equal(expected_1, actual_1);
Assert.Equal(expected_2, actual_2);
Assert.NotEqual(expected_1, actual_2);
Assert.NotEqual(expected_2, actual_1);
}
public int Add(int a, int b)
{
int result = a + b;
return result;
}
執行測試之後結果是通過的,這也代表說我們寫的方法是可以通過測試(我們建立的關卡)的,接著我們修改一下方法,但是不更動測試Case內容,語法如下:
[Fact]
public void Test1()
{
int actual_1 = Add(1, 2);
int actual_2 = Add(2, 4);
int expected_1 = 3;
int expected_2 = 6;
Assert.Equal(expected_1, actual_1);
Assert.Equal(expected_2, actual_2);
Assert.NotEqual(expected_1, actual_2);
Assert.NotEqual(expected_2, actual_1);
}
public int Add(int a, int b)
{
return a + b;
}
同樣執行測試也能成功,代表這次的改動這我們的測試範圍內是沒問題的,我再建立另一個測試Case來確保方法的正確性,如下:
[Fact]
public void Test2()
{
var actual = Add((int)1.5, (int)1.5);
var expected = 3;
Assert.Equal(expected, actual);
}
執行測試後可以發現是失敗的,原因在於型別沒有考慮到,這時候可以修正方法以及適用的測試Case(我會盡量以修正方法為主,除非測試Case本身就有問題或是涵蓋範圍不夠),語法如下:
[Fact]
public void Test1()
{
double actual_1 = Add(1, 2);
double actual_2 = Add(2, 4);
double expected_1 = 3;
double expected_2 = 6;
Assert.Equal(expected_1, actual_1);
Assert.Equal(expected_2, actual_2);
Assert.NotEqual(expected_1, actual_2);
Assert.NotEqual(expected_2, actual_1);
}
[Fact]
public void Test2()
{
var actual = Add(1.5, 1.5);
var expected = 3;
Assert.Equal(expected, actual);
}
public double Add(double a, double b)
{
return a + b;
}
更多小知識,我們下次見~~